package com.gzsxy.Test;


/**
 * 简单选择排序
 * <p>
 * 基本思想： 在要排序的一组数中，选出最小的一个数与第一个位置的数交换；
 * 然后在剩下的数当中再找最小的与第二个位置的数交换，如此循环到倒数第二个数和最后一个数比较为止。
 */
public class Test3 {


    public static void main(String[] args) {
        int[] src = {49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99, 98, 54, 56, 17, 18, 23, 34, 15, 35, 25, 53, 51};
        System.out.println("原始数组排序：");
//        saymsg(src);
        select(src);
//        shell(src);
    }


//    public static void selectSort(int[] src) {
//        int position = 0;
//        //遍历数组
//        for (int i = 0; i < src.length; i++) {
//            int j = i + 1;
//            position = i;
//            int temp = src[i];
//            //循环遍历出最小的数组位
//            for (; j < src.length; j++) {
//                if (src[j] < temp) {
//                    temp = src[j];
//                    position = j;
//                }
//            }
//            //替换掉之前最小下标的数，跟数组第一个下标替换
//            src[position] = src[i];
//            //
//            src[i] = temp;
//            saymsg(src);
//        } saymsg(src);
//    }


    public static void saymsg(int[] src) {
        for (int i = 0; i < src.length; i++) {
            System.out.print(src[i]);
            System.out.print("  ");
        }
        System.out.println();
    }


    public static void select(int[] src) {

        int index = 0;
        //遍历数组拿到当前的数组的值
        for (int i = 0; i < src.length; i++) {

            int temp = src[i];
            int postion = i;
            //根据i数组值后进行比较大小，获得最小的一个，并将最小的那个替换当前i数组的位置
            for (int j = i + 1; j < src.length; j++) {

                if (src[j] < temp) {
                    temp = src[j];
                    postion = j;
                }
            }
            src[postion] = src[i];
            src[i] = temp;
            System.out.println("第" + index++ + "次排序");
            saymsg(src);
        }

    }
}
